package models

import (
	"gin-swagger-demo/pkg/logging"
	"gorm.io/plugin/soft_delete"
)

type Job struct {
	Id              int                   `json:"id" gorm:"autoincr primary_key"` //主键id
	Category        int                   `json:"category"`                              // 任务类型
	Progress        int                   `json:"progress"`                              //进度，0-100
	Status          int                   `json:"status"`                                //任务状态，0=未开始 1=预检进行中 2=预检成功 3=预检失败 4=已执行导入
	ErrorMsg        string                `json:"error_msg"`                             //错误信息，出错时有内容
	OperatorId      int                   `json:"operator_id"`                           //导入人
	CreatedAt       int                   `json:"create_time" gorm:"column:create_time"` //创建时间
	UpdatedAt       int                   `json:"update_time" gorm:"column:update_time"` //更新时间
	DeletedAt       soft_delete.DeletedAt `json:"delete_time" gorm:"column:delete_time"` //删除时间
}

func (item *Job) Add() (int, error) {
	res := db.Create(item)
	if res.Error != nil {
		logging.Error("DB: Job.Add: ", "msg", res.Error.Error(), "item", item)
	}
	return item.Id, res.Error
}

func (item *Job) Edit(data interface{}) (int64, error) {
	res := db.Model(item).Updates(data)

	if res.Error != nil {
		logging.Error("DB: Job.Edit: ", "msg", res.Error.Error(), "item", item)
	}
	return res.RowsAffected, res.Error
}

func (item *Job) Del() (int64, error) {
	res := db.Where(item).Delete(item)
	if res.Error != nil {
		logging.Error("DB: Job.Delete: ", "msg", res.Error.Error(), "item", item)
	}
	return res.RowsAffected, res.Error
}

func (item *Job) Get() (bool, error) {
	res := db.Where(item).First(&item)
	if res.Error != nil {
		logging.Error("DB: Job.Get: ", "msg", res.Error.Error(), "item", item)
		return false, res.Error
	}
	return true, nil
}

func GetJobById(id int) (job *Job) {
	job = &Job{}
	res := db.Where("id = ?", id).First(job)
	if res.Error != nil {
		logging.Error("GetJobById error", "msg", res.Error.Error(), "id", id)
		return nil
	}
	return job
}